#include "list.h"
//链表的创建
link_list * init_link_list (void)
{
        //创建头结点的动态空间
    link_list * list=(link_list *)malloc(sizeof(link_list));
    if(NULL == list)
    {
        printf("创建失败\n");
        return NULL;
    }
    list->next=NULL;
    return list;
}
//链表的销毁
void free_link_list(link_list **list)
{
        if (NULL == *list)
    {
        printf("链表 为 NULL\n");
        return ;
    }
        // 1 销毁结点
    link_node * ptr_1 =  (*list)->next;
    link_node * ptr_2 = ptr_1->next;
    
    for (size_t i = 0; ptr_1 != NULL; i++)
    {
        free(ptr_1);
        // if 判断  判断 ptr2 = NULL 的时候 我们如何处理
        ptr_1 = ptr_2;
        if (NULL != ptr_2)
        {
            ptr_2 = ptr_2->next;
        }
        
    }
    // 2 销毁头结点
    free(*list);
    *list = NULL;
}
//链表的插入
// 单链表的插入(任意位置插入)
void insert_node(link_list* list, Elenemt_data data)
{
    if(NULL == list)
    {
        printf("链表为NULL\n");
        return ;
    }
    link_node * new_node=(link_node *)malloc(sizeof(link_node));
    new_node->data=data;
    new_node->next=NULL;
    //头插法
    if(NULL == list->next)
    {
        new_node->next=list->next;
        list->next=new_node;
        return ;
    }
    //任意位置插入
    link_node * ptr=list->next;
    for(int i=1; ptr->next!=NULL;i++)
    {
        ptr=ptr->next;
    }
    if(NULL == ptr)
    {
        printf("ptr已经指向NULL\n");
        free(new_node);
        return ;
    }
    new_node->next=ptr->next;
    ptr->next=new_node;
    return ;
}
//单链表的遍历
void print_link_list(link_list * list)
{
    if(NULL == list)
    {
        printf("链表为NULL\n");
        return ;
    }
     // 遍历
    link_node * ptr = list->next;
    for (size_t i = 0; ptr!= NULL; i++)
    {
        printf("账号:%s  密码:%s \n",ptr->data.name , ptr->data.pw);
        ptr = ptr->next;
    }
}
//登录
int login_node(link_list * M_list,link_list * U_list,char *name)
{
    if(NULL == M_list||NULL == U_list)
    {
        printf("链表为NULL\n");
        return -1;
    }
    if(NULL == U_list->next&&NULL == M_list)
    {
        printf("链表的内容为空\n");
        return -1;
    }
    link_node * ptr_U=U_list->next;
    link_node * ptr_M=M_list->next;
    for(int i=0;NULL != ptr_U || NULL != ptr_M;i++)
    {
        if(!strcmp(ptr_M->data.name,name))
        {
            return ptr_M->data.flag;
        }
        if(!strcmp(ptr_U->data.name,name))
        {
            return ptr_U->data.flag;
        }
        ptr_U=ptr_U->next;
        ptr_M=ptr_M->next;
    }
    return -1;
}
//提高
void im_node(link_list * U_list,link_list * M_list,char *name)
{
    if(NULL == U_list)
    {
        printf("链表为NULL\n");
        return ;
    }
    if(NULL == U_list->next)
    {
        printf("链表的内容为空\n");
        return ;
    }
    link_node * ptr_U=U_list->next;
    for(int i=0;NULL != ptr_U ;i++)
    {
        if(!strcmp(ptr_U->data.name,name))
        {
            ptr_U->data.flag=1;
            insert_node(M_list,ptr_U->data);
        }
        ptr_U=ptr_U->next;
    }
    return ;
}
//单链表的删除
void delete_node(link_list * list,int pos)
{
    if(NULL == list)
    {
        printf("链表为NULL\n");
        return ;
    }
    if(NULL == list->next)
    {
        printf("链表的内容为空\n");
        return ;
    }
    link_node * ptr_1=list->next;
    link_node * ptr_2=NULL;
    if(1 == pos)
    {
        list->next=ptr_1->next;
        free(ptr_1);
        return ;
    }
    //指向要删除节点的前一个节点
    for(int i=1;i<pos-1&&ptr_1!=NULL;i++)
    {
        ptr_1=ptr_1->next;
    }
    if(NULL == ptr_1)
    {
        printf("ptr_1已经指向NULL\n");
        return ;
    }
    //指向要删除的节点 ptr_2
    ptr_2=ptr_1->next;
    //
    ptr_1->next=ptr_2->next;
    free(ptr_2);
    return ;

}
void edid_node(link_list * U_list,char *name)
{
    int b;
    char buf[128];
    if(NULL == U_list)
    {
        printf("链表为NULL\n");
        return ;
    }
    if(NULL == U_list->next)
    {
        printf("链表的内容为空\n");
        return ;
    }
    link_node * ptr_U=U_list->next;
    for(int i=0;NULL != ptr_U ;i++)
    {
        if(!strcmp(ptr_U->data.name,name))
        {
            printf("请选择修改账号或是密码（1、修改账号   2、修改密码）\n");
            scanf("%d",&b);
            if(1 == b)
            {
                printf("请输入你要修改的账号\n");
                scanf("%s",buf);
                strcpy(ptr_U->data.name,buf);
            }
            else{
                printf("请输入你要修改的密码\n");
                scanf("%s",buf);
                strcpy(ptr_U->data.pw,buf);
            }
            break;
        }
        ptr_U=ptr_U->next;
    }
    return ;
}
//清空
void clear_node_list(link_list *list)
{
    if(NULL == list)
    {
        printf("链表为NULL\n");
        return ;
    }
    if(NULL == list->next)
    {
        printf("链表的内容为空\n");
        return ;
    }
    link_node * ptr_1 = list->next;
    link_node * ptr_2 = ptr_1->next;
    for (size_t i = 0; ptr_1 != NULL; i++)
    {
        free(ptr_1);
        // if 判断  判断 ptr2 = NULL 的时候 我们如何处理
        ptr_1 = ptr_2;
        if (NULL != ptr_2)
        {
            ptr_2 = ptr_2->next;
        }
    }
    list->next=NULL;
}
void register_node(link_list *list)
{
    
}